package com.songshuai.webapi.permission.dao;

import com.songshuai.webapi.permission.model.YxDepartmentRelation;
import io.swagger.models.auth.In;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

public interface YxDepartmentRelationMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(YxDepartmentRelation record);

    int insertSelective(YxDepartmentRelation record);

    YxDepartmentRelation selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(YxDepartmentRelation record);

    int updateByPrimaryKey(YxDepartmentRelation record);

    int insertBatch(List<YxDepartmentRelation> list);

    int deleteByDepartmentId(Integer departmentId);

    YxDepartmentRelation selectByEntity(YxDepartmentRelation yxDepartmentRelation);

    List<YxDepartmentRelation> selectByEntityList(YxDepartmentRelation yxDepartmentRelation);

    /**
     * 根据部门id获取所有父部门（不包含本部门）
     * @param departmentId
     * @return
     */
    List<Integer> selectParentListByDepthSort(Integer departmentId);

    /**
     * 根据部门id获取所有父部门（不包含本部门）根据深度倒序
     * @param departmentId
     * @return
     */
    List<Integer> selectParentListByDepthDESC(Integer departmentId);

    /**
     * 根据部门id获取所有子部门（不包含本部门）
     * @param id
     * @return
     */
    List<YxDepartmentRelation> selectChildList(Integer id);

    /**
     * 根据部门和父部门批量删除
     * @param list
     * @return
     */
    int deleteBatch(List<YxDepartmentRelation> list);

    /**
     * 根据部门id批量删除
     * @param list
     * @return
     */
    int deleteBatchRelation(List<Integer> list);

    /**
     * 根据部门id获取所有父部门id（包括本部门）
     * @param departmentId
     * @return
     */
    List<Integer> selectParentIdList(Integer departmentId);

    /**
     * 查询登录用户的子部门ID集合
     * @param userId
     * @return
     */
    Set<Integer> selectChildDeptIdList(Integer userId);

    /**
     * 查询登录用户的子部门ID集合，包含本部门
     * @param userId
     * @return
     */
    Set<Integer> selectSubDeptIdList(Integer userId);

    /**
     * 查询deptId的子部门ID集合，包含本部门
     * @param deptId
     * @return
     */
    Set<Integer> selectSubIdListByDeptId(Integer deptId);

    /**
     * 根据deptId集合，查询所有用户ID（包括本部门，子部门的用户）
     * @param deptIdSet
     * @return 用户ID集合
     */
    Set<Integer> selectUserIdSetByDeptIdSet(@Param("deptIdSet")Set<Integer> deptIdSet);

}